{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "73bd968b-d970-4a05-94ef-4e7abf990827",
   "metadata": {},
   "source": [
    "Chapter 18\n",
    "\n",
    "# 高斯函数积分\n",
    "Book_3《数学要素》 | 鸢尾花书：从加减乘除到机器学习 (第二版)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "78b5ee81-df59-40eb-8dd6-8d14249100da",
   "metadata": {},
   "source": [
    "这段代码的核心在于计算和可视化函数\n",
    "\n",
    "$$\n",
    "f(x) = e^{-x^2}\n",
    "$$\n",
    "\n",
    "在不同区间上的积分，展示了其定积分和累积积分的特性。\n",
    "\n",
    "1. **定积分计算**：代码首先计算 $f(x)$ 在有限区间 $[a, b]$ 上的定积分，给出在该区间内 $f(x)$ 与 $x$ 轴之间的面积。定积分通过两个方式计算，一是利用不定积分的结果 $F(x)$，即 $f(x)$ 的原函数，在 $a$ 和 $b$ 上求值差：\n",
    "\n",
    "   $$\n",
    "   \\int_a^b f(x) \\, dx = F(b) - F(a)\n",
    "   $$\n",
    "\n",
    "   二是直接调用定积分函数，并将此定积分区域用颜色填充在图上以直观展示。\n",
    "\n",
    "2. **累积积分计算**：代码进一步计算 $f(x)$ 从负无穷到变量 $t$ 的累积积分，即：\n",
    "\n",
    "   $$\n",
    "   F(t) = \\int_{-\\infty}^t f(x) \\, dx\n",
    "   $$\n",
    "\n",
    "   这表示函数从 $x = -\\infty$ 到 $x = t$ 的积分面积，随着 $t$ 的增大，$F(t)$ 逐渐积累更多的面积，趋于稳定。代码通过在不同 $t$ 值上的计算，绘制出累积积分曲线，展示 $F(t)$ 随 $t$ 的变化趋势。\n",
    "\n",
    "这种可视化不仅揭示了 $f(x)$ 的定积分在特定区间上的面积，还展示了累积积分如何随着 $t$ 的增大而逐渐趋近极限。通过这些积分的计算，代码有效地呈现了高斯函数在积分中的行为特点。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8a54901f-e462-45df-bcd2-aec0bec579c3",
   "metadata": {},
   "source": [
    "## 导入包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "7354dcf1-c2f6-4196-b959-858de539f0fa",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "from sympy import *  # 导入符号计算库\n",
    "from matplotlib import pyplot as plt  # 导入绘图库"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "d10ffdb2-d42a-446a-ac5d-a2503e2f4a26",
   "metadata": {},
   "outputs": [],
   "source": [
    "x = Symbol('x')  # 定义符号变量 x"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "495859bf-5603-4301-9737-a5677f79ea46",
   "metadata": {},
   "source": [
    "## 定义函数和积分"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "d4d77f14-87d0-45e9-9f24-c4594255ad96",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle e^{- x^{2}}$"
      ],
      "text/plain": [
       "exp(-x**2)"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f_x = exp(-x**2)  # 定义函数 f(x) = exp(-x^2)\n",
    "f_x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "df1d918d-eeeb-42e9-8ca2-1358f7bf603a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\sqrt{\\pi}$"
      ],
      "text/plain": [
       "sqrt(pi)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "integrate(f_x, (x, -oo, oo))  # 计算 f(x) 在 (-∞, ∞) 上的定积分"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "738a9053-5112-4ada-bb15-ad569838e31a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\sqrt{2} \\sqrt{\\pi}$"
      ],
      "text/plain": [
       "sqrt(2)*sqrt(pi)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "integrate(exp(-x**2 / 2), (x, -oo, oo))  # 计算 exp(-x^2 / 2) 在 (-∞, ∞) 上的定积分"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "ab18cef9-2948-43be-96b4-6abba277da11",
   "metadata": {},
   "outputs": [],
   "source": [
    "f_x_fcn = lambdify([x], f_x)  # 将符号函数转换为数值函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "ac77f169-71d6-4e87-a524-8ecb2f9437d7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{\\sqrt{\\pi} \\operatorname{erf}{\\left(x \\right)}}{2}$"
      ],
      "text/plain": [
       "sqrt(pi)*erf(x)/2"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "integral_f_x = integrate(f_x, x)  # 计算 f(x) 的不定积分\n",
    "integral_f_x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "7bd7da97-b293-4598-91d6-fc183e84d528",
   "metadata": {},
   "outputs": [],
   "source": [
    "integral_f_x_fcn = lambdify([x], integral_f_x)  # 将不定积分转换为数值函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "94ab502a-70fd-42b0-b39f-1579cd438a4c",
   "metadata": {},
   "outputs": [],
   "source": [
    "a = -0.5  # 积分下限\n",
    "b = 1  # 积分上限"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "bc3c76d3-84b9-4a57-a53c-e0caac86bfc2",
   "metadata": {},
   "outputs": [],
   "source": [
    "num = 201  # 网格数量\n",
    "x_array = np.linspace(-3, 3, num)  # x 的取值范围\n",
    "x_a_b_array = np.linspace(a, b, num)  # 积分区间内的 x 取值范围"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "fce900d9-33e1-4b57-b094-bafb359fe0c8",
   "metadata": {},
   "outputs": [],
   "source": [
    "y_array = f_x_fcn(x_array)  # 计算函数在 x_array 上的值\n",
    "y_a_b_array = f_x_fcn(x_a_b_array)  # 计算函数在积分区间 [a, b] 内的值"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c98fb2c3-47d7-4b0f-b71d-8f018e79d43e",
   "metadata": {},
   "source": [
    "## 计算定积分值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "078cbba0-a41f-410a-80c9-c1562baac48d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.2081051392252193"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "integral_a_b = integral_f_x_fcn(b) - integral_f_x_fcn(a)  # 使用不定积分计算积分值\n",
    "integral_a_b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "8636168d-cc0f-454e-b103-1520b9a9a7c8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 0.260249938906523 \\sqrt{\\pi} + \\frac{\\sqrt{\\pi} \\operatorname{erf}{\\left(1 \\right)}}{2}$"
      ],
      "text/plain": [
       "0.260249938906523*sqrt(pi) + sqrt(pi)*erf(1)/2"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "integral_a_b_v2 = integrate(f_x, (x, a, b))  # 使用定积分公式计算积分值\n",
    "integral_a_b_v2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "1b1364ff-39be-4e25-bf06-6bf8b24bc013",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.2081051392252196"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "integral_a_b_v2 = float(integral_a_b_v2)  # 将结果转换为浮点数\n",
    "integral_a_b_v2"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8e049364-cd2b-46ff-8d78-4dec670afc2b",
   "metadata": {},
   "source": [
    "## 绘制函数和积分区间"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "731e3216-00bf-449a-81a7-e3c2cab2e882",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, '$\\\\int_a^b  f(x) = 1.208$')"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots()\n",
    "ax.plot(x_array, y_array, 'b')  # 绘制函数曲线\n",
    "ax.axvline(x=a, color='r', linestyle='-')  # 绘制积分下限 a\n",
    "ax.axvline(x=b, color='r', linestyle='-')  # 绘制积分上限 b\n",
    "ax.axhline(y=0, color='k', linestyle='-')  # 添加 y=0 参考线\n",
    "\n",
    "ax.fill_between(x_a_b_array,\n",
    "                y_a_b_array, \n",
    "                edgecolor='none', \n",
    "                facecolor='#DBEEF3')  # 在积分区间 [a, b] 内填充颜色\n",
    "\n",
    "ax.set_xlim(x_array.min(), x_array.max())  # 设置 x 轴范围\n",
    "ax.set_ylim(np.floor(y_array.min()), \n",
    "            np.ceil(y_array.max()))  # 设置 y 轴范围\n",
    "plt.gca().spines['right'].set_visible(False)  # 隐藏右边框\n",
    "plt.gca().spines['top'].set_visible(False)  # 隐藏上边框\n",
    "ax.set_xlabel('x')  # 设置 x 轴标签\n",
    "ax.set_ylabel('f(x)')  # 设置 y 轴标签\n",
    "ax.set_title(r'$\\int_a^b  f(x) = %0.3f$' % integral_a_b)  # 在标题中显示积分结果"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6ef738ba-1046-4572-a7ec-80884a59c129",
   "metadata": {},
   "source": [
    "## 绘制累积积分函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "520a859f-28f2-4881-b4c6-45e2f2bb3554",
   "metadata": {},
   "outputs": [],
   "source": [
    "t = Symbol('t')  # 定义符号变量 t"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "2653016d-823b-4e45-971e-0ebdafa20209",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle \\frac{\\sqrt{\\pi} \\operatorname{erf}{\\left(t \\right)}}{2} + \\frac{\\sqrt{\\pi}}{2}$"
      ],
      "text/plain": [
       "sqrt(pi)*erf(t)/2 + sqrt(pi)/2"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "integral_f_x_oo_t = integrate(f_x, (x, -oo, t))  # 计算从负无穷到 t 的累积积分\n",
    "integral_f_x_oo_t"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "e19d09bb-133f-47a7-bdd7-57587ccbc5d7",
   "metadata": {},
   "outputs": [],
   "source": [
    "integral_f_x_oo_t_fcn = lambdify([t], integral_f_x_oo_t)  # 将累积积分转换为数值函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "6faee82c-50bf-45f5-97ed-828a13aedd0e",
   "metadata": {},
   "outputs": [],
   "source": [
    "t_array = np.linspace(-3, 3, num)  # 定义 t 的取值范围"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "a72afb19-e35a-4e4d-8f96-686a7097254d",
   "metadata": {},
   "outputs": [],
   "source": [
    "integral_f_x_oo_t_array = integral_f_x_oo_t_fcn(t_array)  # 计算累积积分函数在 t_array 上的值\n",
    "# integral_f_x_oo_t_array"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "f38a2180-51d2-4bde-8134-8b9cc5cacfed",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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BaGJYk1RFGRkZOCyyy5Dp06djC7Hkr788kvUrVsXSUlJGDduHFatWoUOHTqEff+E7RA9/fTTkCSpxsvu3btD2z/00EPYu3cvNm7cCLvdjltvvRX8tDHyHAHg6NGjGDp0KG666SbceeedBlVuPtFkSZE7exVsRVGiWhmbSKT7778fX3zxRYW1OSky7dq1Q25uLnbt2oV7770XY8aMwddffx32/Q1dy8xI999/P/70pz/VuE3r1q1D1xs1aoRGjRrhd7/7HS655BK0aNECu3btimg4Lh5FmuPRo0cxaNCg0GK+dEakWVJkGjVqBLvdXmk06NixY5VGjYhiacKECVi7di1ycnLQvHlzo8uxLJfLhYsvvhgA0KtXL3z++eeYPXs2FixYENb9E7ZDVNbBiUbZyJDX6xVZkiVFkuORI0cwaNAg9OzZE2+++SZstoQdoKySljZJ5+ZyudCzZ09kZ2fjuuuuC92enZ2NESNGGFgZJSpFUTBhwgSsWrUKW7ZsQZs2bYwuKa4oihLR/+mE7RCF67PPPsNnn32Gyy67DA0aNMB3332HJ598EhdddFHCjw5F4ujRo/j973+Pli1b4qWXXsLx48dDP2vSpImBlVlTXl4efvnlF+Tl5SEQCCA3NxcAcPHFF6Nu3brGFmdiGRkZSE9PR69evUKjlHl5eTyWLUIejweHDh0KfX/48GHk5uaiYcOGaNmypYGVWcv48ePx7rvvYs2aNahXr15o9DI1NRW1atUyuDprefTRRzFs2DC0aNECv/76K5YtW4YtW7bgX//6V/gPolCNvvjiC2XQoEFKw4YNlaSkJKV169bKuHHjlJ9++sno0izlzTffVABUeaHIjRkzpsosN2/ebHRppjd37lylVatWisvlUnr06KFs3brV6JIsZ/PmzVW2vzFjxhhdmqVU95r45ptvGl2a5dxxxx2h/bpx48bKlVdeqWzcuDGix+A8RERERJTweBAHERERJTx2iIiIiCjhsUNERERECY8dIiIiIkp47BARERFRwmOHiIiIiBIeO0RERESU8NghIiIiooTHDhERERElPHaIiIiIKOGxQ0RECeH48eNo0qQJnnvuudBtn376KVwuFzZu3GhgZURkBlzLjIgSxrp16zBy5Ejs2LED7du3R/fu3XHttddi1qxZRpdGRAZjh4iIEsr48eOxadMm9O7dG/v27cPnn3+O5ORko8siIoOxQ0RECaWkpASdOnXCjz/+iN27d6NLly5Gl0REJsBjiIgooXz33Xc4evQogsEgfvjhB6PLISKT4AgRESUMn8+HPn36oFu3bmjfvj1efvllfPnll0hLSzO6NCIyGDtERJQwHnroIfzzn//Evn37ULduXQwaNAj16tXDhx9+aHRpRGQwfmRGRAlhy5YtmDVrFt5++22kpKTAZrPh7bffxvbt2zF//nyjyyMig3GEiIiIiBIeR4iIiIgo4bFDRERERAmPHSIiIiJKeOwQERERUcJjh4iIiIgSHjtERERElPDYISIiIqKExw4RERERJTx2iIiIiCjhsUNERERECY8dIiIiIkp47BARERFRwvt/gPp/phuTL1gAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots()\n",
    "ax.plot(t_array, integral_f_x_oo_t_array, 'b')  # 绘制累积积分函数曲线\n",
    "ax.axvline(x=a, color='r', linestyle='-')  # 标记积分下限 a\n",
    "ax.axvline(x=b, color='r', linestyle='-')  # 标记积分上限 b\n",
    "\n",
    "ax.axhline(y=integral_f_x_oo_t_fcn(a), \n",
    "           color='r', linestyle='-')  # 绘制积分值在 a 处的水平线\n",
    "\n",
    "ax.axhline(y=integral_f_x_oo_t_fcn(b), \n",
    "           color='r', linestyle='-')  # 绘制积分值在 b 处的水平线\n",
    "\n",
    "ax.set_xlim(t_array.min(), t_array.max())  # 设置 t 轴范围\n",
    "ax.set_ylim(np.floor(integral_f_x_oo_t_array.min()), \n",
    "            np.ceil(integral_f_x_oo_t_array.max()))  # 设置 y 轴范围\n",
    "plt.gca().spines['right'].set_visible(False)  # 隐藏右边框\n",
    "plt.gca().spines['top'].set_visible(False)  # 隐藏上边框\n",
    "ax.set_xlabel('x')  # 设置 x 轴标签\n",
    "ax.set_ylabel('Integral, F(x)')  # 设置 y 轴标签\n",
    "ax.grid(linestyle='--', linewidth=0.25, color=[0.75, 0.75, 0.75])  # 添加网格"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
